home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Best of Shareware
/
Best of PC Windows Shareware 1.0 - Wayzata Technology (7111) (1993).iso
/
mac
/
DOS
/
UTILITY
/
MXMNU238
/
LOGIN.MNU
< prev
next >
Wrap
Text File
|
1992-03-13
|
22KB
|
919 lines
Comment
========================================================
Copyright 1990-92 by Marc Perkel * All right reserved.
MarxMenu now allows you to login to a Novell network without using
Novell's login program or messing with nasty login scripts. You can
be in MarxMenu all the way in.
Before you start on this make sure you have read the Novell section of
the MarxMenu manual. This menu is somewhat tricky and requires some
study before you dive right in.
Logging into Novell is tricky. Especially if you are using boot roms
on your network cards. Through much trial and error, I have found
some solid tricks that make life easier.
You should have the following two BATCH files in your LOGIN
directory as follows:
LOADNET.BAT ;if used with BESTNET
-----------
@Echo Off
%NET%
%NETD%
Set NET=
Set NETD=
Startup
LOADNET.BAT ;if not used with BESTNET
-----------
@Echo Off
NETX
F:
Startup
STARTUP.BAT
-----------
SET BOOTUP=LOGIN
MarxMenu Login
%BOOTUP%
Each workstation should have their own AUTOEXEC.BAT. The last line
should be LOADNET. If you are running multiple versions of dos or a
variety of computers you should run BESTNET as part of your bootup
sequence.
Also, if you want automatic login you can add the following lines to you
AUTOEXEC.BAT file:
SET USERNAME=MARC Your Name Here
SET PASSWORD=NERD Your Password Here
You should also change the COMSPEC= to the network command.com BEFORE
you run NETX. For some unknown reason, this solves a lot of problems.
Example:
IPX
SET COMSPEC=O:COMMAMD.COM
NETX
Another boot rom quirk is that you can't run any program off a boot
rom that trashes upper memory. An example is running QEMM on a
monochrome monitor.
By using this method the boot disk or boot rom hands control over in
a clean way. LOADNET.BAT then branches to STARTUP.BAT for the rest
of the login sequence.
For some strange reason which I can't explain, LOADNET and STARTUP
have to be two separate batch files. I think it forces the transient
part of COMMAND.COM to load into memory. Anyhow, don't combine these
into one batch file
The first line of STARTUP.BAT is a message that tells this menu that
the user is logging in for the first time. This menu creates a batch
file and puts the name of it in the environment variable BOOTUP.
STARTUP.BAT then executes this file.
This is the example for MY network. You'll have to modify it for
yours. I'm doing a lot of tricky things in my login. Your login might
not need to be as complex as mine.
One word of caution. After modifing this menu, always run MARXCOMP
LOGIN to compile it. Otherwise, if you boot up into it you won't
have enough access rights to recompile automatically. I do this by
making a file called L.BAT.
ME LOGIN.MNU
MARXCOMP LOGIN.MNU
========================================================
EndComment
var
UserName
OldPass
NewPass
Logged
Station
NetAddress
SmartDir
MyServer
OrigServer
HomeDir
DosDir
UseMarxLogin
Shell
PasswordExpDays
SkipError
Servers
StatusWin
TsrLoaded
DrDos6
MyGroups
Comment
========================================================
If UseMarxLogin is set to true then this program will use the MarxMenu
API call to log into the network. If set to false the it will shell
Novell's LOGIN.EXE program.
If UseMarxLogin is set to true, and you are using 386 NetWare then you
will have to add the following command to your AUTOEXEC.NCF file:
SET ALLOW UNENCRYPTED PASSWORDS = ON
========================================================
EndComment
UseMarxLogin = True
Shell = CleanFileName(ReadEnv('COMSPEC'))
MyServer = NovDefaultServer
OrigServer = MyServer
NovServers(Servers)
Logged = ReadEnv('LOGGED') = 'TRUE'
SkipError = False
TryAutoLogin
if not Logged then LoginFromScreen
NovSetPrimaryServer (MyServer)
NovSetPreferredServer (MyServer)
NovReadGroups(UserName,MyGroups) ;Read Groups user is in.
SortArray(MyGroups)
UserName = NovMyLoginName
SetEnv ('LOGGED=')
SetEnv ('USERNAME=' + UserName)
SetEnv ('PASSWORD=')
;----- Another Server Selected
if MyServer <> OrigServer
SetEnv ('BOOTUP=STARTUP')
SetEnv ('LOGGED=TRUE')
NovMapDrive('F',MyServer + '/SYS:LOGIN')
ChDir('F:\LOGIN')
ExitMenu
endif
;----- You can't assume that you have an F: drive unless you map it.
NovMapDrive ('F','SYS:\LOGIN')
Comment
========================================================
If a TEMP environment variable is set, MarxMenu will use it for
temporary batch files. This is compatible with DOS 5 and Windows
conventions. The users should be given full access rights to this
directory. I'm using \TMPFILES for my network.
========================================================
EndComment
if ExistDir('F:\TMPFILES') then SetEnv('TEMP=F:\TMPFILES')
;----- Here we calculate a home directory for each user.
HomeDir = 'F:\HOME\' + UserName
if UserName = 'SUPERVISOR' then HomeDir = 'F:\SYSTEM'
if not ExistDir(HomeDir) then HomeDir = 'F:\PUBLIC\UTIL'
Comment
========================================================
Here we calulate the the name of the dos directory that matches the
version of dos we are running. The directory for DOS 5.0 would be
F:\PUBLIC\DOSV5.00
========================================================
EndComment
DosDir = 'F:\PUBLIC\DOSV' + DosVersionString
;----- DR DOS (NovOS)
if ReadEnv('OS') > ''
DosDir = 'F:\PUBLIC\' + ReadEnv('OS') + ReadEnv('VER')
DrDos6 = Value(ReadEnv('VER')) >= 6
if DrDos6
Bat('SHARE')
endif
endif
Comment
========================================================
Here's where we map our drives. This does not set the search path.
You set that explicitly by writing to the PATH environment variable.
Drive map commands may contain server and volume referrences:
========================================================
EndComment
NovMapRoot ('H', HomeDir) ;Home Directory
NovMapRoot ('N','F:\PUBLIC\NSK') ;Network Survival Kit
NovMapRoot ('O', DosDir) ;Dos Directory
NovMapRoot ('U','F:\PUBLIC\UTIL') ;Utilities Directory
NovMapRoot ('P','F:\PUBLIC') ;Public Directory
NovMapRoot ('L','F:\LOGIN') ;Login Directory
Comment
========================================================
Here we set a different directory for a program depending on if we
have a color or monochrome monitor.
========================================================
EndComment
if VideoMode = Mono
SmartDir = 'F:\PUBLIC\MSMART'
else
SmartDir = 'F:\PUBLIC\CSMART'
endif
if ExistDir SmartDir
NovMapRoot ('S',SmartDir)
endif
Comment
========================================================
W: is a work drive. When an application needs an extra search path, I
move W: to that directory.
OnKey 'L'
|NovMapRoot('W','\PUBLIC\LOTUS')
Lotus
========================================================
EndComment
NovMapRoot('W','H:')
if NovConsoleOperator
NovMapRoot ('V','F:\SYSTEM') ;System Directory
endif
if MyServer = 'TYME'
NovMapDrive ('I','VOL1:')
;----- Here's where I log into a second server.
if PosInList('TYME2',Servers) > 0
NovLogin('TYME2/' + UserName,OldPass)
NovMapDrive('K','TYME2/SYS:')
endif
;----- Here's where I log into a third server.
if PosInList('TSS',Servers) > 0
NovLogin('TSS/' + UserName,OldPass)
NovMapDrive('J','TSS/SYS:')
endif
;----- Here's where I log into another server.
if PosInList('MARX',Servers) > 0
NovLogin('MARX/' + UserName,OldPass)
NovMapDrive('G','MARX/SYS:')
endif
endif
;----- Turbo Pascal 6
if ExistDir ('H:\TP6') then NovMapRoot ('T','H:\TP6')
;----- If no drive C then use home directory
if Floppies < 3 ;I'm using some 4 floppy machines
if not ExistDir ('C:\') then NovMapRoot('C','H:')
endif
;----- Here we define our search paths.
SetEnv ('PATH=T:\;H:\;W:\;U:\;N:\;O:\;P:\;V:\;S:\;')
FixPath ;Verifies all search paths exist
ChDir (HomeDir)
;----- Here's where we set master environment variable strings
SetEnv ('STATION=' + Station)
if Left(Shell,2) <> 'C:' then SetEnv ('COMSPEC=O:\COMMAND.COM')
SetEnv ('PROMPT=$e[1;33m$p: $e[0;32m') ;ansi required
SetEnv ('MXECHO=OFF')
;----- Check for personal menu.
if ExistFile('H:\' + UserName + '.MNU')
SetEnv('PMENU=' + UserName + '.MNU')
endif
;----- Here's where I set up for Pick Directory
if UserName <> 'MARC'
SetEnv ('PD.EXE=/$F:\HOME\PD.PIC')
else
SetEnv ('PD.EXE=/$H:\PD.PIC')
endif
Comment
========================================================
Opens a semaphore that XMETER can read.
To see how many users are users are on with XMETER type:
XMETER LOGIN /U
========================================================
EndComment
NovOpenSemaphore ('XM-LOGIN',0)
;----- Turn NumLock key on if in NumLock group.
if InGroup('NUMLOCK')
NumLock On
else
NumLock Off
endif
;----- LOGIN is set to BOOTUP if logging in for the first time
if UpperCase(ReadEnv('BOOTUP')) <> 'LOGN' then ExitMenu
Comment
========================================================
In order to load TSRs, MarxMenu writes a temporary batch file and
exits. The STARTUP.BAT file then jumps to this batch file.
========================================================
EndComment
;----- Create temporary batch file for rest of login sequence
SetEnv ('BOOTUP=' + BatFileName)
;----- To debug, set ECHO ON and add PAUSE commands
if DosVersionString < '3.30'
Bat('ECHO OFF')
else
Bat('@ECHO OFF')
endif
Bat ('SET BOOTUP=') ;clear BOOTUP environment variable
;----- Set BREAK to ON if NovConsoleOperator
if NovConsoleOperator then Bat('BREAK ON')
Comment
========================================================
Here's where we load up all the TSRs the user is going to use. We set
the environment variable TSR to Y to indicate that TSRs are loaded. This
way if we log out and then back in we won't load them twice.
========================================================
EndComment
TsrLoaded = ReadEnv('TSR') = 'Y'
if not TsrLoaded
SetEnv ('TSR=Y')
;----- Load CastAway
if InGroup ('CASTAWAY')
Bat ('P:\EXPR\CASTAWAY N /W=0 /I=0 /H')
endif
;----- Load ExpressIT Mail System
if InGroup ('EXPRESSIT')
Bat ('P:\EXPR\EXPRESS F12')
endif
;----- Load Lan Assist
if InGroup ('LANASSIST')
if InGroup ('LA-RES')
Bat (LoadHigh + 'P:LA\LA /L >NUL')
else
Bat (LoadHigh + 'P:LA\LA +N >NUL')
endif
endif
;----- Load SideKick if in Sidekick Group
if InGroup('SIDEKICK')
Bat ('KBD CR')
Bat (LoadHigh + 'SWAPSK/N/G/D' + HomeDir + ' >NUL')
Bat ('SK')
Bat ('CLS')
endif
;----- Load SideKick 2 if in SK2 Group
if (InGroup('SK2')) and not DrDos6
Bat (LoadHigh + 'P:\SK2\SK2')
endif
;----- Dr Dos 6
if DrDos6
Bat('TaskMax')
endif
;----- Load MarxPop
if InGroup('MARXPOP') and not DrDos6
Bat('MarxPop H:MarxPop.cfg')
endif
endif
Capture('LASER',2)
Comment
================================================================
This next section deals with running special programs bases on the
physical station number rather than by user. This deals with special
hardware that needs software drivers loaded.
================================================================
EndComment
;----- CD ROM Machine
;if NetAddress = '255:2'
; Bat ('CD\PUBLIC\MA')
; Bat ('MSCDEX.EXE /D:MSCD003 /M:12')
; Bat ('MAR C:\ RW=/ /C')
;endif
;if (NetAddress = '255:C3') or (NetAddress = '254:C3')
; Bat('MODE BW80')
;endif
;----- Set Keyboard Speed Faster if 286 or greater.
if CPUClass > 1 then Bat('KBD 6')
Comment
================================================================
This next section deals with running special programs bases on the
users preferrences.
================================================================
EndComment
if UserName = 'MARC'
Capture('DOT',1)
ChDir('TP6')
endif
if UserName = 'VICKI'
; if not TsrLoaded then Bat(LoadHigh + 'MOUSE')
endif
if UserName = 'KEVIN'
Capture('DOT',2)
SetEnv('PROMPT=($p)')
SetEnv('PATH=' + ReadEnv( 'Path' ) + ';f:\home\kevin\brief' )
ChDir('MARX')
endif
if UserName = '386'
Capture('DOT',1)
endif
if UserName = 'TBBS'
Capture('DOT',1)
ChDir('I:\BBS\TBBS')
NovMapDrive('H','I:')
SetEnv('D.EXE=/O/I')
Bat('CASTOFF')
Bat('DROPTO R1')
endif
if UserName = 'GRACE'
Bat('KBD 6 NumOn');
endif
if UserName = 'WORK'
Capture('DOT',1)
endif
if UserName = 'LITE'
Capture('DOT',1)
NovMapRoot('W','P:\INTEL')
Bat(LoadHigh + 'W:CASMGR.EXE W:CASMGR.CFG')
Bat(LoadHigh + 'W:FAXPOP.EXE')
ChDir('F:\PUBLIC\INTEL')
if AfterHours
BAT('CD\PUBLIC\AWHOST')
BAT('AWHOST -M=W')
BAT('BATEXIT')
else
; BAT('CD\PUBLIC\BITFAX')
; BAT('MARXMENU SFAX')
BAT('BATEXIT')
endif
endif
comment
=======
if UserName = 'LITE'
Capture('DOT',1)
NovMapRoot('W','P:\BITFAX')
Bat(LoadHigh + 'BITSCHED')
Bat(LoadHigh + 'RECVFAX')
if AfterHours
BAT('CD\PUBLIC\AWHOST')
BAT('AWHOST -M=W')
BAT('BATEXIT')
else
BAT('CD\PUBLIC\BITFAX')
BAT('MARXMENU SFAX')
BAT('BATEXIT')
endif
endif
=======
EndComment
Comment
================================================================
The batch file ends by jumping to personal menu, if there is one, or
the default menu if there isn't. DROPTO.BAT is used to erase the
temporary batch file that this menu creates.
================================================================
EndComment
if DrDos6
Bat ('DROPTO MARXMENU NOVMAX')
endif
if ExistFile ('F:\HOME\' + UserName + '\' + UserName + '.MNU')
Bat ('DROPTO MARX ' + UserName)
endif
Bat ('DROPTO MARX TYME')
ExitMenu
;===============================================================
;===============================================================
;----- Procedure Definitions
Procedure Capture (Queue, PrinterPort)
NovCaptureQueue(PrinterPort) = Queue
NovCaptureTimeOut(PrinterPort) = 5 ;5 second timeout
EndProc
Procedure LoadHigh
if ReadEnv('OS2') = 'Y'
Return 'LOADHIGH '
else
Return 'P:\QEMM\LOADHI.COM '
endif
EndProc
Comment
========================================================
If Environment variables USERNAME and PASSWORD are set, this menu
will attempt to log into the network using these values. This allows
for automatic login. You can also pass the parameters on the command
line as follows.
MarxMenu Login <Name> <Password>
The name may contain a referrence to a server: Server/Name
========================================================
EndComment
;----- Try Automatic Login using Environment Variables
Procedure TryAutoLogin
if Logged then Return
if CapsLock
CapsLock Off
else
UserName = ParamStr(2)
if UserName = '' then UserName = ReadEnv('USERNAME')
if UserName > ''
OldPass = ParamStr(3)
if OldPass = '' then OldPass = ReadEnv('PASSWORD')
if OldPass > ''
SkipError = True
Login (UserName,OldPass)
SkipError = False
if PasswordNeedsChanged
Logged = False
Suggest 'C'
endif
endif
endif
endif
EndProc
;----- Select colors and prepare screen
Procedure LoginFromScreen
if ColorScreen
TextColor White Red
BoxBorderColor Green Brown
BoxInsideColor Black Brown
ClearScreen 176
ClockColor Black Brown
TextColor Black Green
BoxHeaderColor Yellow Mag
Shadow
else
TextColor Grey Black
ClearScreen 176
TextColor Black Grey
BoxBorderColor Black Grey
BoxInsideColor Black Grey
BoxHeaderColor Black Grey
ClockColor Black Grey
endif
BlankMessage = 'Netware Login'
ClockMode = 262
GotoXY 1 25
ClearLine
WriteCenter "Computer Tyme Master Network Login Menu"
SingleLineBox
Explode Off
ShadowColor Grey Red
if ColorScreen
DrawBox 3 2 74 5
ClockPos 42 5
TextColor Blue Brown
else
DrawBox 3 2 76 5
ClockPos 44 5
endif
WriteCenter 'Computer Tyme Software Development Laboratory'
Writeln
TextColor Black Brown
WriteCenter '───────────────────────────────────────────────────────'
Writeln
TextColor Black Brown
Write " (C) 1990-92 by Marc Perkel"
DoubleLineBox
BlankTime = 10
Explode On
BlockBox
BoxBorderColor Green Blue
BoxInsideColor Yellow Blue
BoxHeader = " Station Information "
if ColorScreen
DrawBox 39 17 38 6
TextColor Yellow Blue
else
DrawBox 41 17 38 6
TextColor Grey Black
endif
StatusWin = CurrentWindow
UpdateStatusWindow
ChooseOption
EraseTopWindow
EraseTopWindow
EraseTopWindow
TextColor Grey Black
ClearScreen
EndProc
Procedure ChooseOption
var Ch X
repeat
X = 4
if NumberOfElements(Servers) > 1 then X = 5
DrawBox 3 17 26 X
UseArrows
OnScreenOnly
InverseColor Yellow Cyan
Writeln ' L - Login to Network'
Write ' C - Change Password'
if NumberOfElements(Servers) > 1
Writeln
Write ' S - Select Server'
endif
Ch = UpperCase(ReadKey)
if (Ch = 'L') or (Ch = 'C') or (Ch = 'S')
EraseTopWindow
if Ch = 'L'
LoginToNetwork (False)
endif
if Ch = 'C'
LoginToNetwork (True)
endif
if Ch = 'S'
SelectServer
endif
endif
until Logged
EndProc
Procedure Warning (St)
BoxHeader ' Warning '
DrawBox 3 17 length(St) + 4 3
Write Char(7) ' ' St
Wait 300
EraseTopWindow
EndProc
Procedure LoginToNetwork (CP)
var NewPassVerify
BoxHeader = ' Logging into Server * ' + MyServer + ' '
DrawBox 3 10 50 4
UseArrows Off
Security
repeat
if UserName = ''
Write ' Name: '
UserName = UpperCase(Readln)
Writeln
endif
Write ' Password: '
OldPass = UpperCase(Readln)
Write CR
ClearLine
Login (UserName,OldPass)
if not CP
CP = PasswordNeedsChanged
if CP then Warning('Time to change your password!')
endif
if CP
if LastKey <> Esc
repeat
Write ' New Password: '
NewPass = UpperCase(Readln)
Write CR
ClearLine
if NewPass = OldPass then Warning('Select a NEW Password!')
until NewPass <> OldPass
endif
if LastKey <> Esc
Write ' Verify: '
NewPassVerify = UpperCase(Readln)
Write CR
ClearLine
if NewPass = NewPassVerify
NovChangePassword (OldPass,NewPass)
if NovResult <> 0
Warning ('Password Change Failed!')
Logged = False
endif
else
Warning('Password Typed Wrong!')
Logged = False
endif
endif
endif
ClearScreen
if not Logged
UserName = ''
endif
until (LastKey = Esc) or Logged
EraseTopWindow
EndProc
Procedure Login (User, Pass)
if UseMarxLogin
NovLogin (MyServer + '/' + User, Pass)
if NovResult = 223 then NovResult = 0 ;grace login
Logged = NovResult = 0
if Logged
NovMapDrive('F',MyServer + '/SYS:LOGIN')
endif
else
ClearScreenFirst Off
UseCommand On
StuffKbd = Pass + CR
Execute ('LOGIN.EXE ' + MyServer + '/' + User + '>nul')
Logged = ExistDir ('F:\SYSTEM')
endif
if not Logged and not SkipError
if NovResult = 254
Warning('All Logins Disabled!')
elseif NovResult = 222
Warning('Password Expired!')
elseif NovResult = 252
Warning('Invalid User Name!')
elseif NovResult = 220
Warning('Account Disabled!')
elseif (NovResult = 218) or (NovResult = 219)
Warning('Invalid Login Time!')
elseif NovResult = 197
Warning('Intruder Lockout!')
elseif NovResult = 255
Warning('Bad Password!')
else
Warning('Login Failed! '+ Str(NovResult))
endif
endif
EndProc
Procedure PasswordNeedsChanged
var X
X = NovPasswordExpDate (UserName)
if X = 0 then Return False
Return (X - Today) / SecondsInDay <= 5
EndProc
Procedure SelectServer
DrawBox 25 9 20 NumberOfElements (Servers) + 2
MyServer = PickOne (Servers)
NovSetPrimaryServer (MyServer)
NovSetPreferredServer (MyServer)
EraseTopWindow
UpdateStatusWindow
EndProc
Procedure UpdateStatusWindow
SetTopWindow StatusWin
ClearScreen
NetAddress = NovStationAddress (NovConnection)
Station = Str(NovConnection)
while length(Station) < 3
Station = '0' + Station
endwhile
Writeln ' Server: ' MyServer
Writeln ' Network: ' NetAddress
Writeln ' Connection: ' Station
Write ' DOS Version: ' DosVersionString
if StatusWin <> CurrentWindow
SetWindowUnder (StatusWin,StatusWin + 1)
endif
EndProc
;----- Returns True if in list
Procedure InGroup (Group)
Return PosInSortedList(UpperCase(Group),MyGroups) > 0
EndProc
;----- Return True if after hours
Procedure AfterHours
Return (DayOfWeek = Sun) or (DayOfWeek = Sat) or (Hour > 17) or (Hour < 7)
EndProc
;----- Show Item for Debugging
Procedure ShowMe (Item)
DrawBox 1 23 80 3
Write ' '
TextColor Yellow Cyan
Write Item
Wait 300
EraseTopWindow
EndProc